---
description: Learn about the built-in packages and how to use and publish
    DeviceScript-compatible packages on npm.
---

# Packages

DeviceScript supports packages published in [npm](https://www.npmjs.com/) or any other package manager compatible
with the `package.json` specification.

Currently, only TypeScript code can be published - in future we may add [services](/developer/drivers/custom-services).

## Builtin Packages

The packages are dropped by the DeviceScript compiler whenever you run build.
They do not need to be `npm install`ed.

-   `@devicescript/core` - the core package exposing the C runtime and Jacdac services
-   `@devicescript/server` - support for writing Jacdac servers in DeviceScript
-   `@devicescript/test` - [testing framework](/developer/testing)
-   `@devicescript/observables` - [reactive observables](/developer/observables)
-   `@devicescript/graphics` - [images, etc.](/developer/graphics)
-   `@devicescript/crypto` - AES, SHA on Buffers
-   `@devicescript/cloud` - [development gateway](/developer/development-gateway)
-   `@devicescript/i2c` - interacting with [I2C peripherals](/developer/drivers/i2c)
-   `@devicescript/spi` - interacting with [SPI peripherals](/developer/drivers/spi)
-   `@devicescript/net` - [TCP and TLS sockets](/developer/net)
-   `@devicescript/gpio` - working with [GPIO pins](/developer/drivers/digital-io)
-   `@devicescript/runtime` - runtime utilities
-   `@devicescript/settings` - reading/writing [settings in flash memory](/developer/settings)
-   `@devicescript/drivers` - [driver implementations](/developer/drivers)

## NPM packages

-   [Search for `devicescript` on npmjs.com](https://www.npmjs.com/search?q=devicescript).
    By convention, DeviceScript-compatible packages should be marked with the `devicescript` keyword.

-   [Search for the `devicescript` topic on GitHub](https://github.com/topics/devicescript)
    By convention, DeviceScript-compatible packages should be tagged with `devicescript`.

-   Add the package using npm:

```bash npm2yarn
npm install --save package-name
```

## GitHub releases

-   [Search for the `devicescript` topic on GitHub](https://github.com/topics/devicescript)
    By convention, DeviceScript-compatible packages should be tagged with `devicescript`.
-   Add the release using npm:

```bash npm2yarn
npm install --save owner/repo#release
```

## Custom packages

Users can create and package their own DeviceScript packages to share their code with others.

-   Follow the [custom package guide](/developer/packages/custom).
